<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>作用域链分析案例</title>
    <script>
        var num = 1;
        function func(){
            console.log(num);   //1
           // console.log(abc);    //报错  abc is not defined
            //0: 函数参数 arguments  局部变量
        }
        function test(){
            var num = 2;
            var abc = 1;
            func();
            /*
               0:调用对象
               1：window的调用对象
             */
        }
        test();


        function foo(){
            var num = 100;
            return function(){
                console.log(num);
            }
        }
        var num = 20;
        //bar引用了foo的内部函数
        var bar = foo();
        bar();  //100


        var num = 0;
        function foo(){
            var a = 10;
            function bar(){
                function inner(){
                    console.log(num);
                }

                inner();
                /*
                   0：调用对象：自己的参数，局部变量，内部函数，arguments
                   1: bar的调用对象
                   2：foo的调用对象
                   3：window的调用对象
                 */
            }

            bar();
            /*
             0:inner();这样是访问不到inner函数的，因为inner是在bar的内部声明的
             1: 调用对象：自己的参数，局部变量，内部函数，arguments
             2：foo的调用对象
             3：window的调用对象
             */
        }

        foo();
        /*
           0:调用对象：自己的参数，局部变量，内部函数(bar)，arguments
           1:window的调用对象
         */
    </script>
</head>
<body>

</body>
</html>